#include <func.h>

#define MAXPATH 1024

void deleteDir(const char* path);

int main(int argc, char *argv[])
{
    // ./deleteDir dir
    if (argc != 2) {
        fprintf(stderr, "Usage: %s dir\n", argv[0]);
        exit(1);
    }

    deleteDir(argv[1]);
    return 0;
}

void deleteDir(const char* path) {
	// 1. 打开目录
    DIR* stream = opendir(path);
    if (!stream) {
        perror("opendir()");
        exit(1);
    }
    // 2. 遍历目录流，依次删除每一个目录项
    errno = 0;
    struct dirent* curr;
    while ((curr = readdir(stream)) != NULL) {
        // 忽略.和..
        char* filename = curr->d_name;
        if (strcmp(filename, ".") == 0 || strcmp(filename, "..") == 0) {
            continue;
        }
        char subpath[MAXPATH];
        sprintf(subpath, "%s/%s", path, filename);
        if (curr->d_type == DT_DIR) {
            // 如果该目录项是目录，则调用deleteDir递归删除
            deleteDir(subpath);
        } else {
            // 如果该目录项是文件，则调用unlink删除文件
            unlink(subpath);
        }
    }
    if (errno) {
        perror("readdir()");
        exit(1);
    }
	// 关闭目录
    closedir(stream);
    // 目录为空，删除目录
    rmdir(path);
}
